'''
升序数组排序：
先计算2个数组大小，从后往前，判断谁更大，就放在末尾，最后把数组2剩余的数据放到数组1最前面。
'''
def merge(nums1, m, nums2, n):
    p1 = m - 1
    p2 = n - 1
    p = m + n - 1
    
    while p1 >= 0 and p2 >= 0:
        # 把大数据放到末尾
        if nums1[p1] > nums2[p2]:
            nums1[p] = nums1[p1]
            p1 -= 1
        else:
            nums1[p] = nums2[p2]
            p2 -= 1
        p -= 1
    
    print("lef=", nums2[:p2 + 1])

    # 如果 nums2 中还有剩余元素
    nums1[:p2 + 1] = nums2[:p2 + 1]
    print("ret=", nums1)

def test_merge():
    # 测试示例 1
    nums1 = [1, 2, 3, 0, 0, 0]
    m = 3
    nums2 = [2, 5, 6]
    n = 3
    merge(nums1, m, nums2, n)
    assert nums1 == [1, 2, 2, 3, 5, 6], "测试示例 1 失败"

    # 测试示例 2
    nums1 = [1]
    m = 1
    nums2 = []
    n = 0
    merge(nums1, m, nums2, n)
    assert nums1 == [1], "测试示例 2 失败"

    # 测试示例 3
    nums1 = [0]
    m = 0
    nums2 = [1]
    n = 1
    merge(nums1, m, nums2, n)
    assert nums1 == [1], "测试示例 3 失败"

    # 测试示例 4: nums1 和 nums2 都有多个元素
    nums1 = [4, 5, 6, 0, 0, 0]
    m = 3
    nums2 = [1, 2, 3]
    n = 3
    merge(nums1, m, nums2, n)
    assert nums1 == [1, 2, 3, 4, 5, 6], "测试示例 4 失败"

    # 测试示例 5: nums2 的元素全部大于 nums1 的元素
    nums1 = [1, 2, 3, 0, 0, 0]
    m = 3
    nums2 = [4, 5, 6]
    n = 3
    merge(nums1, m, nums2, n)
    assert nums1 == [1, 2, 3, 4, 5, 6], "测试示例 5 失败"

    # 测试示例 6: nums1 的元素全部大于 nums2 的元素
    nums1 = [7, 8, 9, 0, 0, 0]
    m = 3
    nums2 = [4, 5, 6]
    n = 3
    merge(nums1, m, nums2, n)
    assert nums1 == [4, 5, 6, 7, 8, 9], "测试示例 6 失败"

    # 测试示例 7: nums1 和 nums2 都只有一个元素
    nums1 = [2, 0]
    m = 1
    nums2 = [1]
    n = 1
    merge(nums1, m, nums2, n)
    assert nums1 == [1, 2], "测试示例 7 失败"

    print("所有测试用例通过！")

# 运行测试
test_merge()